/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package dominio;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Calendar;
import java.util.GregorianCalendar;
import dominio.Zona;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
 *
 * @author halt
 */
public class Sesion implements Serializable{

    private String idSesion;
    private int numCliente;
    private String hora;
    private int dia;
    private int mes;
    private int ano;
    private boolean realizada;
    private List<Parte> sesionParte;
    private int precioSesion;

    public Sesion() {
        realizada = false;
        sesionParte = new ArrayList<Parte>();
        precioSesion = 0; //incrementa cuando entramos en la ventana de la sesion
                          //y añadimos las partes que se van a realizar o se han
                          //realizado
    }


    public String getIdSesion() {
        return this.idSesion;
    }

    public void setIdSesion() {
        /*hora, dia, mes, ano tienen un valor correcto*/
        this.idSesion = this.hora+String.valueOf(this.dia)
                +String.valueOf(this.mes)+String.valueOf(this.ano);
    }

    public boolean setDia (int dia) {
        Calendar c = new GregorianCalendar();
        if (dia < 0 | dia > 31) return false;
        else if (dia < c.DATE) return false;
        else {
            this.dia = dia;
        }
        return true;
    }

    public boolean setMes (int mes) {
        Calendar c = new GregorianCalendar();
        if (mes < 0 | mes > 12) return false;
        else if (mes < c.MONTH) return false;
        else{
            this.mes = mes;
        }
        return true;
    }

    public boolean setAno(int ano){
        Calendar c = new GregorianCalendar();
        if (ano < 0) return false;
        else if (ano < c.YEAR) return false;
        else {
            this.ano = ano;
        }
        return true;
    }

    public boolean setHora(String hora){
        /*TODO: no puede ponerse una hora anterior a la que es en este momento*/
        if (hora.charAt(0) > 2 | hora.charAt(0) < 0) return false;
        else if (hora.charAt(0) == 2 & hora.charAt(1) > 3) return false;
        else if (hora.charAt(2) > 5) return false;
        else {
            this.hora = hora;
        }
        return true;
    }

    public void setNumCliente(int numC) {
        this.numCliente = numC;
    }
    public void sesionRealizada() {
        this.realizada = true;
    }

    public void calcularPrecioTotal() {
        Configuracion c = new Configuracion();
        try {
            c = c.cargarConfiguracion();
        } catch (FileNotFoundException ex) {
            Logger.getLogger(Sesion.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(Sesion.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(Sesion.class.getName()).log(Level.SEVERE, null, ex);
        }
        Zona z = null;
        for (int i = 0; i < this.sesionParte.size(); ++i) {
            z = c.buscarZona(sesionParte.get(i).getZonaPertenecida());
            precioSesion += z.getPrecio();
        }
    }

    public boolean getRealizada() { return this.realizada;}
    public int getAno(){ return this.ano;}
    public int getMes(){ return this.mes;}
    public int getDia(){ return this.dia;}
    public String getHora(){ return this.hora;}
    public int getNumCliente() {return this.numCliente;}
    public int getPrecioSesion() {return this.precioSesion;}



}
